import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Logger } from '@nestjs/common';
import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston';
import { TradingService } from './trading/trading.service';
import * as readline from 'readline';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    logger: false, // 使用Winston日志
  });

  // 使用Winston日志
  app.useLogger(app.get(WINSTON_MODULE_NEST_PROVIDER));
  
  const logger = new Logger('Bootstrap');
  const tradingService = app.get(TradingService);

  // 启动应用
  await app.listen(3000);
  logger.log('🚀 AI自动交易系统已启动');
  logger.log('📊 控制台地址: http://localhost:3000');

  // 创建控制台交互界面
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
  });

  // 显示欢迎信息和菜单
  console.log('\n' + '='.repeat(60));
  console.log('🤖 AI自动交易系统 - 控制台');
  console.log('='.repeat(60));
  console.log('可用命令:');
  console.log('  start    - 启动自动交易');
  console.log('  stop     - 停止自动交易');
  console.log('  status   - 查看系统状态');
  console.log('  account  - 查看账户信息');
  console.log('  perf     - 查看交易表现');
  console.log('  help     - 显示帮助信息');
  console.log('  exit     - 退出系统');
  console.log('='.repeat(60));

  // 处理控制台命令
  const handleCommand = async (command: string) => {
    const cmd = command.trim().toLowerCase();
    
    try {
      switch (cmd) {
        case 'start':
          console.log('🚀 正在启动自动交易系统...');
          await tradingService.startTrading();
          console.log('✅ 自动交易系统已启动');
          break;
          
        case 'stop':
          console.log('⏹️ 正在停止自动交易系统...');
          await tradingService.stopTrading();
          console.log('✅ 自动交易系统已停止');
          break;
          
        case 'status':
          const state = tradingService.getTradingState();
          console.log('\n📊 系统状态:');
          console.log(`  状态: ${state.isActive ? '🟢 运行中' : '🔴 已停止'}`);
          console.log(`  当前交易对: ${state.currentSymbol}`);
          console.log(`  总交易次数: ${state.totalTrades}`);
          console.log(`  成功交易: ${state.successfulTrades}`);
          console.log(`  失败交易: ${state.failedTrades}`);
          console.log(`  当前余额: ${state.currentBalance} USDT`);
          break;
          
        case 'account':
          console.log('📋 正在获取账户信息...');
          // 这里可以调用账户信息接口
          console.log('账户信息已显示在日志中');
          break;
          
        case 'perf':
          const metrics = tradingService.getPerformanceMetrics();
          console.log('\n📈 交易表现:');
          console.log(`  总收益: ${metrics.totalReturn.toFixed(2)}%`);
          console.log(`  胜率: ${metrics.winRate.toFixed(2)}%`);
          console.log(`  最大回撤: ${metrics.maxDrawdown.toFixed(2)}%`);
          console.log(`  夏普比率: ${metrics.sharpeRatio.toFixed(2)}`);
          console.log(`  平均收益: ${metrics.averageReturn.toFixed(2)}%`);
          break;
          
        case 'help':
          console.log('\n📖 帮助信息:');
          console.log('  start    - 启动自动交易');
          console.log('  stop     - 停止自动交易');
          console.log('  status   - 查看系统状态');
          console.log('  account  - 查看账户信息');
          console.log('  perf     - 查看交易表现');
          console.log('  help     - 显示帮助信息');
          console.log('  exit     - 退出系统');
          break;
          
        case 'exit':
          console.log('👋 正在退出系统...');
          await tradingService.stopTrading();
          rl.close();
          process.exit(0);
          break;
          
        default:
          console.log('❌ 未知命令，输入 "help" 查看可用命令');
      }
    } catch (error) {
      console.error('❌ 命令执行失败:', error.message);
    }
    
    // 显示提示符
    rl.prompt();
  };

  // 设置命令提示符
  rl.setPrompt('交易系统> ');
  rl.prompt();

  // 监听用户输入
  rl.on('line', handleCommand);

  // 处理退出信号
  process.on('SIGINT', async () => {
    console.log('\n👋 收到退出信号，正在安全关闭系统...');
    await tradingService.stopTrading();
    rl.close();
    process.exit(0);
  });

  // 自动启动交易（可选）
  // 如果需要系统启动后自动开始交易，取消下面的注释
  // setTimeout(async () => {
  //   console.log('🤖 自动启动交易系统...');
  //   await tradingService.startTrading();
  // }, 5000);
}

bootstrap().catch((error) => {
  console.error('❌ 系统启动失败:', error);
  process.exit(1);
});
